草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 派生自模板基类的模板构造函数

只是好奇,是否有可能从模板类继承并在派生类的构造函数中调用基类的构造函数,该基类也是模板化的并且没有参数可从中推断其类型?templatestructBase{templateBase(){//noargumentoftypeDtoinferfromstatic_assert(std::is_same::value,"");}};structDerived:Base{Derived():Base::Base(){}//isthereawaytowriteitcorrectly?};在我的特定情况下,我可以用模板方法替换模板构造函数,但这仍然是一个关于语言灵active的有趣问题。

c++ - 跨基类解决虚方法重载

VisualStudio2013。给定:classbase_1{public:virtualvoidfoo(int)=0;};classbase_2{public:virtualvoidfoo(int,double)=0;};classjoin_1_2:publicvirtualbase_1,publicvirtualbase_2{};我有一个水槽:voidsink(join_1_2¶m){param.foo(42,3.14);}但我得到以下编译器错误:errorC2385:ambiguousaccessof'foo'couldbethe'foo'inbase'base_1'o

c++ - 您是否需要从所有派生类调用虚拟基类构造函数?即使它们不是最衍生的?

我在多重继承和菱形问题上遇到了麻烦。出现问题是因为我的基类构造函数需要一个参数。编译器尝试为我的两个抽象类生成默认构造函数,但失败了,因为默认构造函数无法确定基类的参数。我不明白为什么我的抽象类要调用基本构造函数。我认为最派生的类是调用虚拟基类构造函数的类。这是重现我所说内容的代码:classVirtualBase{public:VirtualBase(intinitial):count(initial){}intgetCount()const{returncount;}voidincrement(){count++;}private:intcount;};classContractA

c++ - 在运行时从指向基类的指针获取对象的类型

我正在使用一个类库,其中所有类都直接或间接地派生自基类Base并有一个名字。该库提供了一种按名称搜索对象的工具,它将返回Base*。.有没有办法在不使用dynamic_cast检查所有可能性的情况下找到返回对象的类型?就像我在下面的例子中所做的那样?如果可能的话,我想避免这种情况,因为派生类具有模板参数,这提供了很多可能性。如果我至少能够在不知道模板类型的情况下找出类类型(T1或T2,在下面的示例中),那也很好,即。做类似dynamic_cast*>的事情.#includeusingnamespacestd;classBase{public:virtual~Base(){}};temp

c++ - 如何分配/检索基类?

假设我有:classFoo{...};classBar:publicFoo{...};Foofoo;Barbar;有没有办法做到以下几点:foo_part_of_bar(bar)=foo;foo=foo_part_of_bar(bar);?谢谢! 最佳答案 假设您的意思是classBar:publicFoo,下面的代码应该可以工作。对于foo_part_of_bar(bar)=foo;*(static_cast(&bar))=foo;对于foo=foo_part_of_bar(bar);foo=bar;

C++:转换为不属于基类的接口(interface)

我有一系列代表“智能”map元素的类:MapTextElement、MapIconElement等。这些类扩展了各种Qt图形项类,但也提供了通用的功能,例如返回专用于每个类的属性面板的抽象工厂方法。我已经在纯虚拟类MapElementInterface中声明了这些常用方法。然后我的类乘法继承适当的Qt基类和接口(interface):classMapTextElement:publicQGraphicsTextItem,publicMapElementInterfaceclassMapIconElement:publicQGraphicsItem,publicMapElementInt

c++ - 使用基类的重载函数

我尝试做类似的事情classbase{public:virtualdoubleoperator()(doubleval)=0;virtualdoubleoperator()(doubleprev,doubleval){returnprev+operator()(val);}};classderived:publicbase{virtualdoubleoperator()(doubleval){returnsometing_clever;}};我想重载operator()以将其用于不同的算法,例如std::accumulate或std::transform。我对operator()(do

c++ - 在调用基类构造函数之前修改构造函数参数值

我有以下类层次结构:classBase{//Thisclasscannotbemodifiedpublic:Base(inta,intb,intc){if(a==100&&b==200&&cclassDerived在代码中用的很多地方,所以不能用某种工厂函数代替。现在的问题是是否有某种构造允许我在调用Base构造函数之前修复a、b、c值?我知道我可以使用如下函数:Derived(inta,intb,intc):Base(FixA(a),FixB(b),FixC(c)){}intFixA(inta){/*fixavalue*/returna;}intFixB(intb){/*fixbva

c++ - 在C++中将派生类指针分配给基类指针

我有关注classbase{};classderived:publicbase{public:derived(){}voidmyFunc(){cout现在我有base*pbase=newderived();pbase->myFunc();我收到错误myFunc不是base的成员函数。如何避免这种情况?以及如何让myFunc被调用?注意我应该让基类不包含函数,因为它是设计的一部分,上面的代码是大函数的一部分 最佳答案 如果您坚持认为此函数不应成为base的一部分,那么您只有2个选择。要么使用指向派生类的指针derived*pDeriv

C++ 在基类本身中重写基类的抽象方法?

如果我有这样的基类:classBase{public:Base(){}virtualvoidfoo()=0;};现在,如果我从Base类派生任何类,它将必须覆盖foo()。如果我也想在foo()上为基类设置一个行为怎么办?所以那个基类有它自己的foo,最重要的是,它的每一个都必须覆盖foo?这可能吗? 最佳答案 如果你这样做:classBase{public:Base(){}virtualvoidfoo()=0;};voidBase::foo(){{cout您将获得一个抽象类,因此您将不能创建类Base的对象b并通过调用b.foo(